package org.wdcode.common.params;

import org.wdcode.common.config.ConfigManage;
import org.wdcode.common.config.ConfigManageFactory;
import org.wdcode.common.constants.StringConstants;
import org.wdcode.common.log.WdLogs;
import org.wdcode.common.util.CommonUtil;

/**
 * 系统配置信息 内部使用 在config.xml或config.properties 中配置,本包实现可配置功能<br/>
 * <h2>注: 使用本类需依赖 Apache Commons-Configuration包,如果没有此包配置将不生效 而直接使用默认值</h2> 参数操作类
 * @author WD
 * @since JDK6
 * @version 1.0 2010-01-05
 */
public abstract class WdParams {
	// 读写配置文件接口
	private static ConfigManage	config;

	// 静态初始化
	static {
		// 获得配置
		try {
			config = ConfigManageFactory.build("config.xml");

		} catch (Throwable e) {
			WdLogs.warn(e);
		}
		// 获得配置
		try {
			if (CommonUtil.isEmpty(config)) {
				config = ConfigManageFactory.build("config/config.xml");
			}
		} catch (Throwable e) {
			WdLogs.warn(e);
		}
	}

	/**
	 * 获得配置文件接口
	 * @return 配置文件接口
	 */
	public final static ConfigManage getConfig() {
		return config;
	}

	/**
	 * 设置配置文件接口
	 * @param config 配置文件接口
	 */
	public final static void setConfig(ConfigManage config) {
		WdParams.config = config;
	}

	/**
	 * 设置配置文件
	 * @param config 配置文件
	 */
	public final static void setConfig(String config) {
		// 判断配置不为空
		if (!CommonUtil.isEmpty(config)) {
			setConfig(ConfigManageFactory.build(config));
		}
	}

	/**
	 * 设置属性 如果这个key存在 会替换掉这个属性
	 * @param key 属性key
	 * @param value 属性value
	 */
	public final static void setProperty(String key, Object value) {
		// 配置不为空
		if (!CommonUtil.isEmpty(config)) {
			config.setProperty(key, value);
		}
	}

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @return value
	 */
	public final static String getString(String key) {
		return CommonUtil.isEmpty(config) ? StringConstants.EMPTY : config.getString(key, StringConstants.EMPTY);
	}

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	public final static String getString(String key, String defaultValue) {
		return CommonUtil.isEmpty(config) ? defaultValue : config.getString(key, defaultValue);
	}

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	public final static boolean getBoolean(String key, boolean defaultValue) {
		return CommonUtil.isEmpty(config) ? defaultValue : config.getBoolean(key, defaultValue);
	}

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	public final static int getInt(String key, int defaultValue) {
		return CommonUtil.isEmpty(config) ? defaultValue : config.getInt(key, defaultValue);
	}

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	public final static long getLong(String key, long defaultValue) {
		return CommonUtil.isEmpty(config) ? defaultValue : config.getLong(key, defaultValue);
	}

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	public final static Short getShort(String key, Short defaultValue) {
		return CommonUtil.isEmpty(config) ? defaultValue : config.getShort(key, defaultValue);
	}
}
